const { Maybe, Container } = require('./support.js')
const fp = require('lodash/fp');

/**
 * 练习1: 使用fp.add(x,y)和fp.map(f,x)创建一个能让functor里的值增加的函数ex1
 */

let maybe = Maybe.of([1, 2, 3]);

let ex1 = (arr) => {
    //实现功能
    return fp.reduce( fp.add, 0, fp.map(val => val + 1, arr))
}

// console.log(ex1(maybe._value)) // 9


/**
 * 练习2: 实现一个函数ex2,能够使用fp.first获取列表的第一个元素
 */

let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do'])
let ex2 = (arr) => {
    //实现函数
    return fp.first(arr)

}
// console.log(ex2(xs._value));  //do





/**
 * 练习3: 实现一个函数ex3, 使用safeProp和fp.first找到user的名字的首字母
 */

let safeProp = fp.curry(function(x, o) { 
    return Maybe.of(o[x])
})
let user = { id: 2, name: 'Albert' }
let ex3 = (user) => {
    //实现函数
    let name =  safeProp('name', user)._value
    return fp.first(name)
}

// console.log(ex3(user))  //A







/**
 * 练习4: 使用Maybe重写ex4,不要有if语句
 */
//  let ex4 = function(n) {
//      if(n) {
//          return parseInt(n)
//      }
//  }

let ex4 = function(n) {
    return Maybe.of(n).map( value => parseInt(value))._value
}

// console.log(ex4(23323.233));  //23323